home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 11
/
FM Towns Free Software Collection 11.iso
/
t_os
/
tool
/
ugoku
/
ugoku.doc
< prev
next >
Wrap
Text File
|
1995-11-06
|
76KB
|
2,470 lines
for FM TOWNS(要4M)
TownsOS V2.1 L31以上
----------------------------------------------------------------------------
ハイパーアニメーションシステム
「 動くざんす 」V2.1 L11c
戸田 浩
----------------------------------------------------------------------------
************** 注意事項!! **************
* *
* 古いVDSYS.EXPをお使いの方,新しいVDSYS.EXPを複写 *
* する場合,そのディレクトリに新しいVDSYS.TABも必ず複写してく *
* ださい。そうしないと古いVDSYS.TABが生き残り,新しいテーブル *
* による画質の改善が行われません。 *
* *
**************************************
<標準再生システム> MOVPLAY.EXP
「動くざんす」標準再生装置で,「MOVファイル」,「V02ファイル」の2種
類の動画を再生するプログラムです。
<標準再生システム> MOVPLAY.EXG
同じく「動くざんす」標準再生装置ですが,シェル対応したものです。
<MOVRECシステム> MOVREC.EXP
TIFF形式にて用意された複数の原画を元にして,動画のMOVファイルを作成
します。またサウンドデータを動画に追加したり,ループ情報を細かく設定したり等
のMOVファイル編集も可能になっています。このシステムはアニメ調の原画や,レ
イトレーシングで作成された原画を動画にするのに適したシステムです。
<MOVRECシステム> MOVREC.EXG
シェル対応したMOVRECです。基本的にはMOVREC.EXPとかわりあり
ません。
<VDシステム> VDSYS.EXP
ビデオデジタイズカード経由のビデオ信号を取り込んで,これを原画の動画「V0
0ファイル」等に変換し,さらにこれを圧縮して圧縮動画「V02ファイル」に変換
します。また,ビデオ信号を,直接に瞬間圧縮して「V02ファイル」に変換したり,
V02ファイルや,V00ファイルを編集する機能も備わっています。
<VDシステム> VDSYS.EXG
シェル対応したVDSYSです。基本的にはVDSYS.EXPとかわりありませ
ん。
<VDシステム用テーブル> VDSYS.TAB
これをVDSYS.EXPと同じディレクトリに置くことにより画質が改善します。
必ずVDSYS.EXPと共にお使いください。
<動くざんすレリーフ> MOVRLF.EXP
TIFFファイル,V00ファイル,MVBファイルの原画にグラディエント処理
をして,レリーフ,輪郭線処理等の画像処理をほどこし,特殊な動画を作成するため
の支援をします。
<動くざんすレリーフ> MOVRLF.EXG
シェル対応した動くざんすレリーフです。基本的には上記のMOVRLF.EXP
とかわりありません。
<動くざんすデモ> MOVDEMO.EXP
MOVファイルのデモンストレーションをします。つまりテキストファイルに書か
れた,MOVファイル再生の予定表を見ながら,指示されたMOVファイルを順次再
生します。なお,動画とともにCDプレーヤーの再生も可能です。
<テキスト> UGOKU.DOC
本解説書のことです。
<ソース集> <SRC>
----------------------------------------------------------------------------
***** 目次 *****
1.MOVPLAY.EXP および
MOVPLAY.EXG の使い方
2.MOVREC.EXP および
MOVREC.EXG の使い方
3.VDSYS.EXP および
VDSYS.EXP の使い方
4.MOVRLF.EXP および
MOVRLF.EXG の使い方
5.MOVDEMO.EXP の使い方
6.ライブラリの使い方
7.動くざんすデータの仕様
8.使用上の注意
----------------------------------------------------------------------------
***** 本章 *****
1.MOVPLAY.EXP および
MOVPLAY.EXG の使い方
***** TownsMENUから使用する場合 *****
メニューの構造は次のようになっています。
+-- 『動くざんす』
| +-- 『About』
| +-- サイドワーク
| +-- 『終了』
|
+-- 『ファイル』
| +-- 『ファイル選択』
| +-- 『再生』
|
+-- 『設定』
| +-- 『MOV再生条件設定』
| +-- 『V02再生条件設定』
|
+-- 終了ボタン
次にに各コマンドの解説をします。
<<ファイル選択>>
MOVファイル,もしくはV02ファイルを選択します。
<<再生>>
MOVファイル,もしくはV02ファイルの動画再生をします。メモリオーバのと
きはエラーを返すことがあります。なお再生中はマウスボタンで次のような操作が可
能です。
左ボタン を押すと一時停止します。
左ボタン を押したまま右ボタンをチョンチョンとクリックするとコマ送り
になります。
右ボタン のみ押すと終了です。
<<MOV再生条件設定>>
MOVファイルを再生するときの条件を設定します。それぞれの設定項目は次のよ
うになっています。
<表示モードの選択>
ハイスキャンモード,ロースキャンモードの選択をします。なお起動前にTownsMENU
の『設定』の中にあるビデオモードONをクリックしておかないと,スキャンモードの
選択はできません。
<ウエイトの設定>
速度調整です。1増えるごとに1フレームにつき1/60秒ウエイトします。通常は
0にしておいてください。
<表示倍率>
表示倍率を指定します。0.5倍,1倍,1.5倍,2倍が選べます。
<データ保存領域の設定>
動画データを「メインメモリ上に置くか」,「ハードディスク上に置くか」の選択
をします。メインメモリ上にデータを置くと高速にデータが展開できます。またハー
ドディスク上に置くと大量のデータを扱うことができます。
<ループの設定>
繰り返しを「する」,「しない」の選択ができます。
<<V02再生条件設定>>
V02ファイルを再生するときの条件を設定します。これは上記のMOV再生条件
の設定とまったく同じですので説明は省略します。
<<終了>>
終了します。
注意:MOVデータがサウンドデータ(*.FMB, *.PMB, *.SND)を指定し
てる場合,それらのデータはMOVデータと同じディレクトリにある必要が
あります。指定されたサウンドデータが存在しない場合,再生時に音は聞け
ません。
***** バッチファイルから使用する場合 *****
RUN386 MOVPLAY SAMPLE.MOV [-V2] [-M]
RUN386 MOVPLAY SAMPLE.V02 [-V3] [-D]
等とします。なお拡張子".MOV", ".V02"等は省略できません。オプションについては
次のような意味があります。
-V1 : ハイスキャン,画面拡大率0.5倍
-V2 : ハイスキャン,画面拡大率1倍
-V3 : ハイスキャン,画面拡大率1.5倍
-V4 : ハイスキャン,画面拡大率2倍
-V1 : ロースキャン,画面拡大率0.5倍
-V2 : ロースキャン,画面拡大率1倍
-V3 : ロースキャン,画面拡大率1.5倍
-V4 : ロースキャン,画面拡大率2倍
-V17 : ロースキャン,画面拡大率1倍
-V18 : ロースキャン,画面拡大率2倍
-V : ロースキャン,画面拡大率1倍
-D : データ保存領域をディスクに設定
-M : データ保存領域メモリに設定
-R : 繰り返し指定
以上のオプションは TMENU.IF2に登録して利用するときにも指定可能です。なおビ
デオ出力したい時には,TownsMENUの『設定』の中にあるビデオモードONをクリックし
てVTBIOS.NSDを事前に組み込んでおき,上記のロースキャンモードを選択します。
2.MOVREC.EXP および
MOVREC.EXG の使い方
本システムは「ハードディスク」とともにお使いになることをお勧めします。ハー
ドディスクの容量は大きければ大きいほどよいのですが,20Mバイト程度は欲しい
ところです。
本プログラムを起動すると,各コマンドがフローチャート式に表示されますが,画
面上部のメニューバーにある,「ファイル」を選択することによっても,各コマンド
の実行が可能です。各コマンドは次のような構成になっています。
+-- 『MOVREC』
| +-- 『About』
| +-- サイドワーク
| +-- 『終了』
|
+-- 『ファイル』
| +-- 『動画ファイル名』
| |
| +-- 『原画ディレクトリの指定』
| +-- 『原画ファイルの登録』
| +-- 『ビデオ入力』
| +-- 『原画のチェック』
| |
| +-- 『動画ファイル作成(新規)』
| +-- 『動画ファイル作成(追加)』
| |
| +-- 『編集』
| |
| +-- 『再生』
|
+-- 終了ボタン
それでは各コマンドの解説をしましょう。
<<動画ファイル名>>
これから作成する(あるいは編集する)動画のMOVファイル名を設定します。
<<原画ディレクトリの指定>>
原画となるTIFFファイルの入ったディレクトリを指定します。ファイルダイア
ログを操作し,目的のディレクトリを表示して「指定」を選択します。
<<原画ファイルの登録>>
原画のTIFFファイルの登録をします。指定できるTIFFファイルの形式は
32768色モード
320×240ドット以下の大きさの絵
非圧縮,圧縮のどちらのデータも可
となっています。それでは以下に本サブルーチンの各コマンドの解説をします。
<1つずつ登録>
原画ディレクトリ・リストの原画を1つずつ指定して登録します。
<一括登録>
原画ディレクトリ・リストの原画をまとめて指定し,「一括登録」を選択すること
により,一括登録できます。
<全登録>
全部の原画をまとめて登録します。
以下の機能はカット・アンド・ペーストの機能です。すでに登録
された原画をさらに部分指定(複数の指定も可能)することによっ
て,次のような操作が可能です。
<表示>
部分指定された原画を表示します。複数の指定がある場合は,それらを続けて表示
します。
<削除>
部分指定された原画を削除します。このときペースト用バッファに削除された原画
が記憶されます。
<取得>
部分指定された原画をペースト用バッファに記憶します。
<挿入>
ペースト用バッファの原画を,部分指定された原画の上の段に挿入します。
<全削除>
登録された原画を全部削除します。このときペースト用バッファに削除された全原
画が記憶されます。
<終了>
本サブルーチンを終了します。
<<ビデオ入力>>
ビデオカードより入力されるビデオ信号をディジタイズして,原画ファイルとして
取り込みます。ディジタイズ中に
マウス左ボタン を押すと1枚の絵を取り込み,
マウス右ボタン を押すと終了
になります。実際には,ビデオデッキから絵をコマ送りにしながらマウス左ボタンで
絵を取り込んでいきます。取り込まれた絵のファイル名は
“!$@&0000.TIF”,
“!$@&0001.TIF”,
“!$@&0002.TIF”,
……………
となり,原画ディレクトリに保存されていきます。なお上記の<<原画ファイルの指
定>>にて,後から再編集することもできます。
<<原画のチェック>>
登録した原画を順次,表示してチェックします。
<<動画ファイル作成(新規)>>
録画の各種条件を設定して,登録された原画を元に動画ファイルを作成します。な
お同じ動画ファイル名が存在する場合,古いデータを消去し新しくデータを作り直し
ますので注意が必要です。ここで録画の各種条件について解説しておきます。
<ラフレート>
ラフレートです。この数値を大きくすると圧縮率が上がりますが,画質は落ちます。
推奨値は0~16ですが,とりあえず最初は8にしてみてください。
<ソフトネス>
この数値を大きくすると圧縮率が上がりますが,絵にソフトネスが掛かります。こ
れはレイトレの絵や,アニメ調の絵を多少ぼかしてもかまわないから,少しでも圧縮
率を上げたいときに,0~16の範囲で指定します。なお,このソフトネスには,輪
郭線をできるだけぼかさないような工夫がなされています。
<移動補償>
これをONにしておくと動き補償をします。通常はONにしておいてください。
<実行>
以上の条件を設定した後に,実行を選択しますと録画が始まります。なお画質にも
よりますが,ものによっては動画データ作成に時間がかかることがあります。
ところで,一番最初の原画の大きさが表示領域の大きさになります。例えば,最初
の原画の大きさが320×240ドットであったなら,全体を通じて320×240
ドットの大きさの動画になりますが,これが,例えば120×80ドットであれば,
全体を通じて動画は120×80ドットの大きさになってしまいます。
<<動画ファイル作成(追加)>>
このコマンドも上記の<<動画ファイル作成(新規)>>と,ほぼ同じものですが,
こちらのコマンドは,すでに録画されている動画ファイルに追加して録画するコマン
ドです。操作方法は上記と全く同じですので,説明は省略します。
<<編集>>
ここでは録画済みのデータに
サウンド効果の追加,
ループ(For Next)の設定,
ウエイトのタイミングモードの設定,
表示領域の設定,
等をします。なおサウンドを追加する場合,本システムには録音機能はありません。
他のシステムで
FMBファイル
PMBファイル
SNDファイル
を動画データMOVファイルと同じディレクトリに用意してください。その後に本ル
ーチンを実行します。
<サウンドデータの登録>
まず最初に,動画データのメインヘッダに使用するサウンドデータを登録します。
FMサウンド ( *.FMB ),
PCMサウンド( *.PMB ),
PCM音声 ( *.SND 最大8つまで指定可),
を選択すると,サウンドファイルのリストが表示されますから使用したいサウンドデー
タのファイル名を指定してください。サウンドデータを使用しない場合は,この部分
を空白にしておきます。なお,以下の点にご注意ください。
* SNDデータは複数,指定できますが,その大きさだけ,再生時に
MOVデータのおさまる領域が小さくなりますので注意が必要です。
* FMBファイル,PMBファイルを指定する場合には,各チャンネ
ルの音色番号,パンポットも忘れず指定してください。
* PMBデータとSNDデータは,両方同時に指定できますが,その
際,次のような制約があります。
PMBデータは56Kバイト以下にすること
PMBデータの71チャンネルは,SNDに使用されるため使えない
注意:もしもPMBデータとSNDデータを両方同時に指定したのにも
かかわららず,PMBデータの大きさが54Kバイトを越えている
場合,PMBデータの一部の音が鳴らなくなる現象が起こります。
これには十分注意してください。
<タイミングモード>
フレーム表示のタイミングを設定します。
ウエイトしてからフレームを表示
フレームを表示してからウエイト
の2種類のタイミングモードが選択できます。
<メインウエイト>
MOVファイルのヘッダにはメインウエイトというものを指定しなくてはなりませ
ん。これは動画データ全体を通しての速度調整です。1増えるごとに1フレームにつ
き1/60秒ウエイトします。
例 メインウエイト = 3 なら毎秒20コマ表示,
メインウエイト = 4 なら毎秒15コマ表示,
というふうに全体の表示速度をコントロールできます。メインウエイトを0のままに
しておきますと表示速度にムラが生じますので注意してください。
<表示領域の設定>
ここで指定された領域が再生時にセンタリングされて表示されます。通常は
(000,000)-(319,239)
に設定しておきますが,表示領域を意図的に変えたいときには,この数値を変更しま
す。
以上のように条件を設定した後に実行を選択しますと,メインヘッダに条件が登録
され,次に各フレームの条件設定に移ります。ではその各フレームの条件設定の解説
に入ります。
<サウンド0~3>
サウンドのON/OFFを設定しますが,SNDデータが指定されている場合には,
サウンド3は「音声」という表示に変わり PCM音声の再生になります。それぞれ
のチャンネルごとに
キー(1ならON,0ならOFF)
チャンネル(CH.)
音程(NOTE)
音量(VELO)
を設定します。なおテストをクリックすることによって,その音のチェックができま
す。ところでサウンド関係の予備知識なしにこれらのコントロールをすることは無理
と思えますので,おわかりにならない方はマニュアル等のサウンド関係の部分をお読
みください。
<ウエイト>
各フレームごとにウエイトの値を細かく設定できます。実際のウエイト時間は,こ
の各フレームごとのウエイトと,先程のメインウエイトを加算した値になります。
<ループ>
これはBASICなどで言うところの,For Nextの設定です。この値を0にして
おくと何も起こりませんが,1以上にするとループの先頭となり,その数値が繰り返
しの回数になります。また「ループエンド指定」を選択しておくと,それはループの
終りを意味します。なおループは,レベル8まで入れ子可能なものとなっています。
つまり
FOR
FOR
FOR
NEXT
NEXT
NEXT
と8段階までレベルを深められます(ちなみに上の例はレベル3)。
<TIFF セーブ>
これは一種のサービスルーチンで,フレーム条件を設定するものではありません。
各フレームの絵をTIFFファイル(非圧縮,大きさは320×240ドットに固定)
に落とすことができるコマンドです。
<表示>
フレームの絵を大きく表示します。
<条件を書き込んで次のフレームに>
条件を書き込んで次のフレームに移ります。フレーム条件をいろいろ書き込んでも
これを実行しないと,実際にフレーム条件は記録されませんので注意してください。
<条件を書き込まず次のフレームに>
条件を書き込まず次のフレームに移ります。
<ジャンプ>
条件を書き込まず別のフレームにジャンプします。ジャンプ先番号を指定した後に
「ジャンプ」を選択します。
<取り消し>
本サブルーチンから抜け出します。
<<再生>>
動画再生をします。操作方法はMOVPLAY.EXPと殆ど同じですので,説明
はそちらの方をご覧ください。
<<終了>>
終了します。
3.VDSYS.EXP の使い方
本システムには「ビデオカード」,「ハードディスク」が必要です。なおハードディ
スクの容量は大きければ大きいほどよいのですが,20Mバイト程度は欲しいところ
です。
さて,本プログラムを初めて起動した場合には,本プログラムが使用する色データ
のテーブルファイルVDSYS.TABを起動ディレクトリに作成しますので,しば
らくお待ちください(2回目以降からは,この作業は行いません)。これが終わりま
すとメニューが表示されますが,これれは次のような構成になっています。
+-- 『VDSYS』
| +-- 『About』
| +-- サイドワーク
| +-- 『終了』
|
+-- 『ファイル』
| +-- 『V00録画』
| +-- 『V00再生』
| +-- 『V00→V02』
| +-- 『瞬間圧縮V00→V02』
| |
| +-- 『MVB録画』
| +-- 『MVB再生』
| +-- 『MVB→V02』
| +-- 『瞬間圧縮MVB→V02』
| |
| +-- 『瞬間圧縮→V02』
| +-- 『V02→V02』
| +-- 『アフレコ→V02』
| |
| +-- 『V02再生』
|
+-- 『編集』
| +-- 『V00編集』
| +-- 『MVB編集』
| +-- 『V02編集』
| |
| +-- 『ビデオチェック』
|
+-- 終了ボタン
それでは各コマンドの解説をしましょう。
<<V00録画>>
指定したV00ファイルに,ビデオ信号を録画します。なお録画の条件は次のよう
なモードが選択できます。
<録画と録音>
メモリ上に録画と録音を同時に行い,終了後にすべてのデータをファイルに
書き込みます。なお動画のデータとしてはV00ファイル,サウンドデータと
してはSNDファイル(同ファイル名+拡張子.SND)を作成します。
<録画のみ>
録画のみを実行しV00ファイルを作成します。なおメモリ依存度により,
データの収録場所を選択できます。つまり
メモリ依存度 0%:全てのデータを直接ハードディスクに書き込む
メモリ依存度 50%:メモリとハードディスクに半分ずつに分けて記録し,
後でV00ファイルに生成する
メモリ依存度100%:全てのデータをメモリに書き込み,
後でV00ファイルに書き込む
の中から,マシンの性能に応じて選択します。
<録音のみ>
録音のみを実行しSNDファイルを作成します。
このほかにも,総フレーム数,毎秒のフレーム数,フレームの大きさ等が,次のよ
うに設定できます。
<総フレーム数> :録画時間の長さに応じて自由に設定
<毎秒のフレーム数> :毎秒8.6,10,12,15フレーム
<フレームの大きさ> :128×96,160×120,192×144
各種の条件設定が終了したなら,「実行」を選択してください。デジタイズが始まり
ますので,次にマウスボタンをクリックして録画を開始します。 なお,CDの音も
ミックスして録画したいときなどは,あらかじめサイドワーク等でCD音楽を鳴らし
ておくと,その音も同時に録音されますし,また電子ボリュームを適度に設定するこ
とにより,マイクからのミクシング等も可能です。このようにライン入力以外のサウ
ンド関係はサイドワークで自由に変更できる仕様になっています。
<<V00再生>>
指定したV00ファイルを再生します。再生中はマウス操作により,一時停止,強
制終了等が可能です。
<<V00→V02>>
指定したV00ファイルを圧縮し,指定したV02ファイルに変換します。圧縮の
条件としては
<フィルター> :動的なチラツキ防止フィルター
<3Dフィルター>:輪郭線をぼかさないようにノイズを除去する特殊フィルタ
の値が設定できますが,より高圧縮率を望むときには,それぞれの値を大きします(
それぞれの最大値は6)。なお普段は,それぞれの値を3にしておきます。
<<瞬間圧縮V00→V02>>
V00ファイルを高速にV02ファイルに圧縮します。圧縮率は37.5%(32
768色で換算)ですが,非常にスピーディに変換できます。
<<MVB録画>>,<<MVB再生>>,
<<MVB→V02>>,<<瞬間圧縮MVB→V02>>
これらはMVBファイルを作成しそれを圧縮しV02ファイルにするための一連の
コマンドですが,上記のV00ファイル関係のコマンドと殆ど同じですので説明は省
略します。
注意:同じディレクトリでV00ファイルとMVBファイルを混ぜて
作成することは,あまりお勧めできません。たまたま同じ名前の
V00ファイルとMVBファイルがあった場合(もちろん拡張子
は違うわけですが),SNDファイル名がぶつかり合ってしまい
ます。
<<瞬間圧縮→V02>>
指定したV02ファイルに,ビデオ信号を直接録画します。V00録画と同じよう
に録画条件を設定し,実行を選択しデジタイズに入ったなら,マウスボタンをクリッ
クして録画を開始します。
<<V02→V02>>
V02ファイルをもう一度圧縮することができます。瞬間圧縮したV02ファイル
を,さらに圧縮するときにお使いください。
<<アフレコ→V02>>
すでにできあがったV02ファイルに別の音を録音します。実行を選択しデジタイ
ズがはじまったなら,マウスボタンにより録音を開始します。
<<V02再生>>
できあがったV02ファイルを再生します。各種再生条件の変更もできます。
<<V00編集>>
V00ファイルどうしのつなぎあわせや,トリミングを行いますが,それぞれのファ
イルは次のように選択します。
<第1動画ファイルの指定>
つなぎあわせる最初のV00ファイル名を指定します。また最初と終わりの
フレームを指定して細かくトリミングをすることもがきます。例えば
最初 00010 終わり 00089
とすれば,10フレーム目から89フレーム目の70コマが指定されたことに
なり,これ以外のフレームはカットされます。
<第2動画ファイルの指定>
つなぎあわせる2番目のV00ファイル名を指定します。また同じようにト
リミングも可能です。
<合成動画ファイルの指定>
第1V00ファイルと第2V00ファイルをつなぎあわせた,合成動画が出
力されるファイル名を指定します。
<第2動画ファイルの消去>
第2V00ファイル名を消去しておけば,第1V00ファイルのみのトリミ
ングとなりす(なお消去といっても,指定が解除になるのみで,ファイルが消
えてなくなるわけではありません)。
以上の設定をしたのちに実行を選択しますと,編集が行われ合成原画ファイルの内
容は書き換えられます。
なお,それぞれのV00ファイルは,再生してチェックしてみることも可能になっ
ています。
<<MVB編集>>,<<V02編集>>
MVBファイル,V02ファイルも,同様にして編集が可能ですが,やり方はV0
0ファイルの場合とまったく同じですので,説明は省略します。
<<ビデオチェック>>
ビデオ信号をちょっとのぞいてみることができます。ビデオデッキ等の巻き戻しや,
早送りを確認したいときに便利です。
<<終了>>
終了します。
4.MOVRLF.EXP および
MOVRLF.EXG の使い方
動くざんすレリーフは,本体のメモリ4Mバイト以上,TownsOS V2.1
L20以上で起動してください。基本的な操作はマウスによって行いますが,一部
ファイルネーム等はキーボードから入力する必要があります。また基本的な作業の流
れは次のようになります。
まず「基本設定」下にあるコマンドで,原画の種類と,その原画ファイル名や出力
原画ファイル名等を設定します。次に「下地設定」により下地を設定しますが,これ
は単色指定,TIFFファイル読み込み,原画の3種類の設定ができます。そして次
に「エフェクト選択」より目的のエフェクトを選択し,最後に「実行」を選択してエ
フェクトを実行しますが,その前に「エフェクト選択」下の詳細設定によって,エフェ
クトの設定数値を変更することもできます。なお処理結果は「出力画の再生」で見る
ことができます。
本プログラムのコマンドは,次のようになっています。
+- 基本設定 -+- TIFF -+- 原画ディレクトリの設定
| | |
| | +- 原画の登録
| | |
| | +- 原画の再生
| | |
| | +- 出力画ファイルの設定
| |
| +- V00 --+- 原画ファイルの設定
| | |
| | +- 原画の再生
| | |
| | +- 出力画ファイルの設定
| |
| +- MVB --+- 原画ファイルの設定
| |
| +- 原画の再生
| |
| +- 出力画ファイルの設定
|
|
+- 下地設定 -+- 単色指定 -+- R(赤)設定
| | |
| | +- G(緑)設定
| | |
| | +- B(青)設定
| |
| +- TIFF -+- TIFFファイルの設定
| | 読み込み
| |
| +- 原画指定(下地に原画を指定する)
|
|
+- エフェクト-+- 原画をレリーフ処理して下地と合成
| 選択 |
| +- 原画を輪郭線処理(黒)して下地と合成
| |
| +- 原画を輪郭線処理(白)して下地と合成
| |
| +- 原画を2値化輪郭線処理(黒)して下地と合成
| |
| +- 原画を2値化輪郭線処理(白)して下地と合成
| |
| +- 原画の輝度や色相を調節して下地と合成
| |
| +- 下地をレリーフ処理して原画と合成
| |
| +- 下地を輪郭線処理(黒)して原画と合成
| |
| +- 下地を輪郭線処理(白)して原画と合成
| |
| +- 下地を2値化輪郭線処理(黒)して原画と合成
| |
| +- 下地を2値化輪郭線処理(白)して原画と合成
| |
| +- 下地の輝度や色相を調節して原画と合成
| |
| +- 詳細設定 -+- 感度設定
| |
| +- カットオフ値設定
| |
| +- なめらかさ設定
| |
| +- 輝度の混合比設定
| |
| +- 色相の混合比設定
| |
| +- 2値の間隔or輝度の基準値設定
| |
| +- 微分モード設定
| |
| +- レリーフ光の方向設定
|
|
+- 実行(エフェクト実行)
|
+- 出力画の再生(エフェクト実行後の再生)
|
+- プログラム終了
それでは各コマンドの使い方を説明していきましょう。
「基本設定」下にあるコマンド群
<TIFF> これを選びますと,エフェクト処理の対象としてTIFFファイル(
32768色,320×240ドット以下)を選択したことになります。この場合に
は,続いて次のような項目を設定しておく必要があります。
*原画ディレクトリ 原画のTIFFファイルが入っている原画を指定します。ファ
イルセレクタが画面に表示されますので,目標のディレクトリまでファイルセレク
タを操作し「指定」をクリックしてください。
*原画の登録 エフェクトをかける原画を順に登録します。原画登録パネルが表示
されますので,指示に従って原画を登録してください。
*原画の再生 原画を順次再生します。
*出力画ファイル 出力画のTIFFファイルを設定します。ファイル名は上から
4文字までが有効で,たとえば
G:¥GRAPH¥ABCD
と設定しますと,出力画ファイルは
G:¥GRAPH¥ABCD0000.TIF
G:¥GRAPH¥ABCD0001.TIF
G:¥GRAPH¥ABCD0002.TIF
…………
というふうになり,4文字のファイル名に4桁の通し番号と拡張子.TIFが添え
られます。なお,圧縮セーブも可能です。
<V00> これを選びますと,エフェクト処理の対象としてV00ファイルを選択
したことになります。この場合,続いて次のような項目を設定しておきます。
*原画ファイル 原画のV00ファイルを設定します。
*原画の再生 原画を再生します。
*出力画ファイル 出力画のV00ファイルを設定します。
なお,原画ファイルが音声のSNDファイルを従えている場合は,自動的にSND
ファイルも出力側に「出力画ファイル名+拡張子.SND」でコピーします。
<MVB> これを選びますと,エフェクト処理の対象としてMVBファイルを選択
したことになります。この場合,続いて次のような項目を設定しなければなりません
が,その内容はV00の場合とほとんど同じなので,説明は省略します。
*原画ファイル
*原画の再生
*出力画ファイル
「下地設定」下にあるコマンド群
<単色指定> これを選びますと,下地は単色指定となります。その色はR(赤),
G(緑),B(青)のそれぞれの階調で設定します。
<TIFF読み込み> これを選びますと,下地は32768色のTIFFファイル
の中から選択することになります。この場合は具体的なTIFファイル名を指定して
おかなければいけません。
<原画> これを選びますと原画が下地になります。これを選択した場合,特に他の
設定項目はありません。
「エフェクト選択」下にあるコマンド群
<原画をレリーフ処理して下地と合成> 原画をレリーフ処理して下地と合成します。
たとえば下地に木目のTIFFファイルを設定しておきますと,木目の上に動くレリー
フが描かれます。
<原画を輪郭線処理(黒)して下地と合成> 原画を黒色で輪郭線処理して,下地と
合成します。たとえば下地に明るい色か,もしくは明るめの木目のTIFFファイル
等を設定しておきますと,その上に輪郭線の動く絵が描かれます。
<原画を輪郭線処理(白)して下地と合成> 原画を白色で輪郭線処理して,下地と
合成します。この場合には下地を黒っぽい色,もしくは暗いTIFFファイルの絵を
選んでおいてください。
<原画を2値化輪郭線処理(黒)して下地と合成> 原画を黒色で輪郭線処理して下
地と合成しますが,その輪郭線は2値化します。つまりON/OFFの2値だけで輪
郭線を作るわけですが,輪郭線の色の濃さは後述する詳細設定で微調整できます。
<原画を2値化輪郭線処理(白)して下地と合成> 原画を白色で輪郭線処理して下
地と合成しますが,その輪郭線は2値化します。
<原画の輝度や色相を調節して下地と合成> 原画の輝度や色相を調節して,下地と
合成します。たとえば白地に黒で描いたアニメ調の原画を,木目の下地に合成する場
合,後述する詳細設定の輝度の基準値を255に設定しておきますと,木目に直接ア
ニメを描いたようにできます。逆に黒地に白っぽい色で描いた原画の場合は,輝度の
基準値を0に設定するとよいでしょう。
<下地をレリーフ処理して原画と合成> 下地をレリーフ処理して原画と合成します。
たとえば下地に木目を設定しておきますと,木目のしわが動画に刻み込まれます。
<下地を輪郭線処理(黒)して原画と合成> 下地を黒色で輪郭線処理して,原画と
合成します。原画は明るめのものを選んでください。
<下地を輪郭線処理(白)して原画と合成> 下地を黒色で輪郭線処理して,原画と
合成します。原画は暗めのものを選んでください。
<下地を2値化輪郭線処理(黒)して原画と合成> 下地を黒色で輪郭線処理して原
画と合成しますが,その輪郭線は2値化します。
<下地を2値化輪郭線処理(白)して原画と合成> 下地を白色で輪郭線処理して原
画と合成しますが,その輪郭線は2値化します。
<下地の輝度や色相を調節して原画と合成> 下地の輝度や色相を調節して,原画と
合成します。たとえば後述する詳細設定の輝度や色相の混合比を20~50%に設定
すると,動画のバックにうっすらと静止画が映っているような効果が得られます。
<詳細設定> 詳細設定には次のような項目がありますが,これらは各エフェクト毎
に個別に設定できるようになっています。
*感度 微分(グラディエント)の感度を設定します。これによってレリーフや輪
郭線を感知する感度を調節します。
*カットオフ値 カットオフより小さい微分値を0にすることによって,細かなノ
イズをカットします。特に2値化輪郭線の時は,この値が輪郭線ON/OFFの境
になりますので,デリケートな調整が必要です。
*なめらかさ 仕上がりの滑らかさを設定します。つまり,これは仕上げにソフト
ネスをかける時の,その強さを設定するものです。
*輝度の混合比 処理をした絵の輝度は,仕上げの絵に混ぜることができますが,
これは,その比率を設定するものです。たとえばレリーフの場合,ある程度,輝度
を混合することにより,仕上げにめりはりをつけることができます。
*色相の混合比 処理をした絵の色相は,仕上げの絵に混ぜることができますが,
これは,その比率を設定するものです。
*2値の間隔 2値化輪郭線における,2値データの間の大きさを設定します。
*微分モード 微分モードを設定しますが,このモードにはワイドとノーマルの2
つがあります。まずワイドモードでは,安定して自然な感じの輪郭線が抽出されま
すが,線はやや太く甘くなります。いっぽうノーマルモードは,細くてシャープな
輪郭線が抽出できるのですが,調節がクリティカルで難しいという難点があります。
ですから初期設定は,使いやすく安定している,ワイドモードに設定してあります。
*レリーフ光線 レリーフにおける,光線が当たる方向を設定します。左上,右上,
左下,右下の4つのモードの中から選択できます。
その他のコマンド
<実行> エフェクトを実行します。
<出力画の再生> エフェクトを実行し,出力された絵の再生をします。
<プログラム終了> 画面右上の出口の絵をクリックしますと,プログラムが終了し
ます。
5.MOVDEMO.EXPの使い方
これはオートデモの情報が書き込まれたテーブルファイルを読み取りながら,動画
のデモンストレーションを行うものです。バッチファイルから使用する場合には
RUN386 MOVDEMO I:\MOV\SAMPLE.TAB
とします。またこの例ですと MOVDEMO をアイテム登録し SAMPLE.TAB をパラメータ
に指定すればアイコンクリックのみで,デモが起動できます。
********** 注意 !!!!! **********
なお,大切なことは,カレントディレクトリはSAMPLE.TABの存在するディレクトリ
に切り換えられて作業されるということです。つまり上記の例では<I:¥MOV>
にディレクトリが切り換わります。ですからSAMPLE.TABの中に書かれた「ディレクト
リの省略されたMOVファイル」は,ディレクトリ<I:¥MOV¥>の中から読み
出そうとします。けっしてMOVDEMO.EXP本体のある場所ではありませんの
で,注意してください。なお終了時には,すべてのディレクトリの状態を元の状態に
戻して終了します。
******************************
なお SAMPLE.TAB はテーブルファイルであり拡張子 .TAB の省略はできません。M
OVDEMO の使いこなしは,このテーブルファイルの表記法をよく理解していただくこ
とにかかってくると思いますので,さっそく説明に入りましょう。
まず一例をあげます。テキストエディタ等で次のようなテーブルを書いていただけ
ればよいわけです。
***** SAMPLE.TAB の一例 *****
display h
mute 48
cdplay -start 2:00:00:00 -end 3:00:00:00 -count 10
loop 1
play i:\mov\mov2\cube2 -count 5 -memory m
play i:\mov\mov2\ani2 -count 5 -memory d
play i:\mov\mov2\soremov2 -count 5 -memory m
loop 2
play i:\mov\mov2\bnd -memory m
play i:\mov\mov2\bnd_1 -count 10
play i:\mov\mov2\bnd_2 -count 2 -memory d
loop e
play i:\mov\mov2\ball_s -memory d -count 01
cdpause
mute 3
play i:\mov\mov2\ball -count 02
cdcontinu
mute 49
wait 600
loop e
cdstop
この例を元に基本事項からいきましょう。
1.各命令文は改行でひと区切りされ実行される。
2.命令文の中のスペースやタブは2つ以上続けてあってもかまわない。
3.命令文と命令文との間にスペースやタブや改行は,いくつあってもかま
わない。
4.連続した数値 “3:00:00:00”等にスペースを入れ,たとえば
”3: 00:00:00”と書くことは許されない。
5.“-”のついた命令は省略可能である(もちろんデフォルトの値があら
かじめ設定されている)。
6.大文字,小文字の区別はないが日本語の使用は一切禁止である。
7.デモンストレーションに邪魔にならないよう,エラー表示は一切しない。
といったところが基本です。それでは各コマンドについて解説します。
CDPLAY
CDの音楽を再生します。
CDPLAY -START 2:1:10:20 -END 4:2:15:30 -COUNT 12
としますと,CDの
第2トラック 1分:10秒:20フレーム
から
第4トラック 2分:15秒:30フレーム
の間を12回繰り返して演奏します(参考までに1秒=75フレーム)。
なお
-START X:X:X:X:,
-END X:X:X:X:
を省略した場合は音楽トラックの最初から最後までの演奏となりま
すし,
CDPLAY -START 2 -END 3
等とした場合には2トラックの最初から2トラックの最後(3トラ
ックの最初は2トラックの最後に等しい)までの再生です。
-COUNT X
を省略した場合は1回だけの演奏となります。
CDSTOP
CDの音楽再生を中止します。
CDPASE
CDの音楽再生を一時停止します。
CDCONTINU
CDの一時停止を解除します。
VOLUME
各種音源のボリュームを設定します。
volume 0,127,80
は音源0の左側のボリュームを127,右側を80(最大値は127)に設定する
というものです。音源に関しては次のようになります。
音源0 : LINE IN
音源1 : CD
音源2 : MIC
音源3 : MODEM
MUTE
各種音源のミュートを設定します。
mute XX
としますとXXで指定された音源のミュートをします。なおここで指定さ
れたXXは次のように設定されます。
bit0 : PCM
bit1 : FM
bit2 : LINE IN R
bit3 : LINE IN L
bit4 : CD R
bit5 : CD L
bit6 : MIC
bit7 : MODEM
以上の各ビットが1のときはミュートを解除しそのままの音量を保ち,0
ときはミュートにします。
PLAY
動画を再生します。
play name.mov -count 5 -memory m
としますと,NAME.MOV という動画ファイルをメインメモリ上で5回繰り返
して再生します。なお -memory m を -memory d としますとディスク上にデ
ータを展開します。次に省略に関しての情報を掲げておきます。
拡張子 .MOV は省略できます。
-COUNT X
を省略した場合,1回だけの再生となります。
-MEMORY X
を省略した場合メインメモリ上にデータを展開します。
WAIT 数値
数値が1つ増すごとに1/60秒ほどウェイトします。
DISPLAY
表示モードを設定します。
display h : ハイスキャンモード
display i : インタレースモード(ロースキャン)
省略した場合にはハイスキャンモードになります。
LOOP
BASIC のFOR NEXT にあたるもので繰り返しを指定します。
loop X : ループ開始位置を宣言しそのループ回数はX回
loop e : ループの終了位置を示す
なおループはレベル8まで入れ子可能です。
6.ライブラリの使い方
***** お知らせ *****
今回は画面モード10用,V02再生ルーチンが加わりました。これは
2画面切り替えで高画質に再生する
上の画面だけで再生する
下の画面だけで再生する
3通りの再生ができますが,使い方は従来の関数とほとんど同じですので,今回は,
特に説明をつけません。
用意したライブラリの中で,UGOKU.LIB,UGOKU.Hとあるのが,動
くざんすの再生用ライブラリと,そのヘッダです。その他のOLD_MOV.LIB,
VIDEO.LIB等は,動くざんすのシステムを作るのには必要だったけれど,動
くざんすそのものとは直接関係のない,言ってみれば私個人用のライブラリです。こ
こでは
UGOKU.LIB,
UGOKU.H
の使い方を解説しましょう。
<<初期化と,終了について>>
動くざんすのライブラリを使用する前には,画面やサウンド等の初期化が必要です。
例えばMOVファイルを再生したいときなどは,まず最初に
#include <stdio.h>
#include <stdlib.h>
#include <egb.h>
#include <mos.h>
#include <snd.h>
#include "ugoku.h"
char swork[16384]; /* SND work */
char ework[1536]; /* EGB work */
char mwork[4096]; /* MOUSE work */
int init()
{
SND_init(swork); /* sound init. */
SND_elevol_init();
SND_elevol_mute(0x03);
EGB_init(ework,1536); /* graph init. */
EGB_resolution(ework,0,10); /* Page0 = モード10 */
EGB_writePage(ework,0); /* Page0 init. */
EGB_displayStart(ework,2,2,2);
EGB_displayStart(ework,3,320,240);
EGB_displayPage(ework,0,1); /* Page0のみ表示 */
MOS_start(mwork,4096); /* mouse init. */
MOS_resolution(0,10);
MOS_resolution(1,3);
MOS_writePage(1);
MOS_horizon(0,639);
MOS_vertical(0,479);
MOS_disp(0);
MOS_setpos( 320, 240 );
return 0 ;
}
int end()
{
MOS_end();
SND_end();
return 0 ;
}
といったイニシャライズと終了ルーチンを用意しておいて,プログラムの始めと終わ
りに実行すればいいでしょう。またV02ファイルを再生したいときには,モード5
の画面を用意しなければいけませんので,グラフィックイニシャライズの部分を次の
ように書き換えるといいでしょう。
EGB_init(ework,1536); /* graph init. */
EGB_resolution(ework,0,5); /* Page0 = モード5 */
EGB_writePage(ework,0); /* Page0 init. */
EGB_displayStart(ework,2,2,2);
EGB_displayStart(ework,3,256,240);
EGB_displayPage(ework,0,1); /* Page0のみ表示 */
いずれにしても,これらはVRAMのページ0に動画を展開する例です。なお,終了
ルーチンの end() を必ず実行してプログラムを終わるようにしてください。
<<MOVファイルのメモリ再生>>
MOV再生の基本は,
1.初期化を実行し
2.再生ルーチンを呼び出す
という操作になります。例えばメモリ上にMOVファイルのデータを取り込んで再生
する場合は,
int mov_memory_play_init( name, check, frame, x0, y0, x1, y1, wsize ) ;
char *name ; /* ファイル名(パスも含めたフルネームで指定) */
int (*check)() ; /* フレーム毎のチェック関数 */
int *frame ; /* 総フレーム数をバック */
int *x0 ; /* 表示領域をバック */
int *y0 ; /* 表示領域をバック */
int *x1 ; /* 表示領域をバック */
int *y1 ; /* 表示領域をバック */
int *wsize ; /* ワークエリアのサイズをバック */
を呼び出したのち,次に再生ルーチンの
int mov_memory_play_repeat( buffer, work, name, vramPage, wait, repeat );
char *buffer ; /* 153600バイトのバッファ */
char *work ; /* wsizeバイトのワークエリア */
char *name ; /* ファイル名 */
int vramPage ; /* 0:VRAM PAGE0, 1:VRAM PAGE1, 2:VRAM PAGE両方を使用 */
int wait ; /* 加算ウエイト(通常は0を入れておく) */
int repeat ; /* リピートの回数(ただし-1を入れると無限回リピートとなる) */
を呼び出すことにより,MOV再生が実行できます。それでは実例を掲げてみましょ
う。次に掲げるサンプルはMOVPLAY.EXPから抜粋(一部修正あり)したも
ので,マウス操作により一時停止等が可能なMOVファイル再生ルーチンです。
/* on memory type */
int memory_play_mov( name, wait, rep, page )
char *name ; /* file name */
int wait ; /* ウエイト */
int rep ; /* repeat */
int page ; /* vram page */
{
extern int mov_play_check() ;
char *work ;
int frame, x0, y0, x1, y1, wsize ;
int error ;
/* イニシャライズ */
error
= mov_memory_play_init( name, mov_play_check,&frame,&x0,&y0,&x1,&y1,
&wsize ) ;
if( error )goto vd10 ;
/* bufferとworkはまとめて確保する */
if( (work = (char *)malloc( wsize+153600 )) == NULL ){
error = 7 ;
goto vd10 ; /* out of memory */
}
/* mute set */
SND_elevol_mute( 0x03 ) ;
error = mov_memory_play_repeat(work, work+153600, name, page, wait, rep);
free( work ) ;
vd10:
return error ;
}
/* check func. */
int mov_play_check()
{
int sw;
/* 注意:sw 押されているとbit off 押されてないとbit on */
SND_joy_in_1( 0x01, &sw ); /* end check */
sw = (sw ^ 0xff) & 0x30;
if( sw == 0 )return 0;
c01:
SND_joy_in_1( 0x01, &sw );
sw = (sw ^ 0xff) & 0x30;
if( sw & 0x10 )
{
while( sw == 0x30 )
{
SND_joy_in_1( 0x01, &sw );
sw = (sw ^ 0xff) & 0x30;
}
if( sw == 0x20 )goto c02;
while( sw )
{
SND_joy_in_1( 0x01, &sw );
sw = (sw ^ 0xff) & 0x30;
if( sw == 0x30 )break;
}
return 1;
}
c02:
if( sw )goto c01;
return -1;
}
補足説明しておきますが,動くざんすのすべての再生装置では,1フレーム表示さ
れる毎に,チェック関数( 上の例ではmov_play_check() )が呼び出されます。この
関数が
0を返せば:再生を続ける
1を返せば:VSYNCカウンターをクリアして再生を続ける
(一時停止の後の再生の再開の時は,このようにすればいい)
-1を返せば:再生終了
というふうになっています。ただし,ちょっとむずかしい話になりますが,このチェッ
ク関数は割り出し処理中に呼び出されることになっており,あまり複雑な処理はでき
ないことになっています。例えばマウス関係のBIOS( MOS_rdpos(&s,&x,&y) )
等を呼び出すことは絶対やってはいけません。マウス関係の関数では,スタックを深
く掘っていくルーチンが多いため,mov_play_check() の中からは絶対使用禁止とい
うわけですね。また,変わったチェック関数の設定の仕方として
int mov_play_check( frame )
int frame ;
{
if( frame >= 10 )return -1 ;
else retunr 0 ;
}
というふうにしておけば,MOVファイルを10フレーム目まで再生して,自動的に
終了します。このように,整数の引数を設定しそれを参照すれば,チェック関数側で,
今何フレーム目を再生中かが判る仕組みになっているわけですね。
<<MOVファイルのディスク再生>>
ディスクを読み取りながら再生するときも,基本手順はまったく同じです。上記の
サンプル例の
関数 mov_memory_play_init を mov_disk_play_init に,
関数 mov_memory_play_repeat を mov_disk_play_repeat に,
取り替えるだけでディスク読み取りの再生ルーチンになってしまうわけです。つまり,
イニシャライズ関数は次のようになっています。
int mov_disk_play_init( name, check, frame, x0, y0, x1, y1, wsize ) ;
char *name ; /* ファイル名 */
int (*check)() ; /* フレーム毎のチェック関数 */
int *frame ; /* 総フレーム数をバック */
int *x0 ; /* 表示領域をバック */
int *y0 ; /* 表示領域をバック */
int *x1 ; /* 表示領域をバック */
int *y1 ; /* 表示領域をバック */
int *wsize ; /* ワークエリアのサイズをバック */
これを呼び出したのち,次に再生ルーチンの
int mov_disk_play_repeat( buffer, work, name, vramPage, wait, repeat );
char *buffer ; /* 153600バイトのバッファ */
char *work ; /* wsizeバイトのワークエリア */
char *name ; /* ファイル名 */
int vramPage ; /* 0:VRAM PAGE0, 1:VRAM PAGE1, 2:VRAM PAGE両方を使用 */
int wait ; /* 加算ウエイト(通常は0を入れておく) */
int repeat ; /* リピートの回数(ただし-1を入れると無限回リピートとなる) */
を呼び出すことにより,MOVのディスク読み取り再生が実行できます。実例を掲げ
ると次のようになります。
/* disk read type */
int disk_play_mov( name, wait, rep, page )
char *name ; /* mov file name */
int wait ; /* ウエイト */
int rep ; /* repeat */
int page ; /* vram page */
{
extern int mov_play_check() ;
char *work ;
int frame, x0, y0, x1, y1, wsize ;
int error ;
/* イニシャライズ */
error
= mov_disk_play_init( name, mov_play_check,&frame,&x0,&y0,&x1,&y1,
&wsize ) ;
if( error )goto vd10 ;
/* bufferとworkはまとめて確保する */
if( (work = (char *)malloc( wsize+153600 )) == NULL ){
error = 7 ;
goto vd10 ; /* out of memory */
}
/* mute set */
SND_elevol_mute( 0x03 ) ;
error = mov_disk_play_repeat(work, work+153600, name, page, wait, rep);
free( work ) ;
vd10:
return error ;
}
/* check func. */
int mov_play_check()
{
int sw;
/* 注意:sw 押されているとbit off 押されてないとbit on */
SND_joy_in_1( 0x01, &sw ); /* end check */
sw = (sw ^ 0xff) & 0x30;
if( sw == 0 )return 0;
c01:
SND_joy_in_1( 0x01, &sw );
sw = (sw ^ 0xff) & 0x30;
if( sw & 0x10 )
{
while( sw == 0x30 )
{
SND_joy_in_1( 0x01, &sw );
sw = (sw ^ 0xff) & 0x30;
}
if( sw == 0x20 )goto c02;
while( sw )
{
SND_joy_in_1( 0x01, &sw );
sw = (sw ^ 0xff) & 0x30;
if( sw == 0x30 )break;
}
return 1;
}
c02:
if( sw )goto c01;
return -1;
}
なおチェック関数の注意点に関しては,先の<<MOVファイルのメモリ再生>>
をご覧ください。
<<MOV再生における画面設定>>
次に,MOV再生における画面設定の例をMOVPLAY.EXPから抜粋して掲
げておきます。ここに掲げるルーチンでは
倍率 zoom(1~4倍)
表示領域(x0,y0)-(x1,y1),
(関数 mov_disk_play_init 等によって得られる情報)
を元に,VRAMのページ0の画面を最適な状態に設定します。
/* 倍率にあわせて画面設定 */
/*
注意 : GUIライブラリの都合でpage0の画面を設定し,
最後にpage1に切り換えている
*/
int mov_graph_init( zoom, x0,y0,x1,y1 )
int zoom, x0,y0,x1,y1 ;
{
int xd, yd ;
int x[4], y[4] ;
xd = x1-x0+1 ;
yd = y1-y0+1 ;
if( 640/zoom >= xd )
{
x[0] = ( 640/zoom - xd )/2 ;
x[1] = x0 ;
x[2] = zoom ;
x[3] = xd ;
}
else
{
x[0] = 0 ;
x[1] = x0 - ( 640/zoom - xd )/2 ;
x[2] = zoom ;
x[3] = 640/zoom ;
}
if( 480/zoom >= yd )
{
y[0] = ( 480/zoom - yd )/2 ;
y[1] = y0 ;
y[2] = zoom ;
y[3] = yd ;
}
else
{
y[0] = 0 ;
y[1] = y0 - ( 480/zoom - yd )/2 ;
y[2] = zoom ;
y[3] = 480/zoom ;
}
EGB_displayPage(ework,1,2);
EGB_writePage(ework,0); /* 画面0設定 */
/* このようにすると,どの様な状態にでも確実に切り換えられる */
EGB_displayStart(ework,3,0,0);
EGB_displayStart(ework,2,1,1);
EGB_displayStart(ework,2,x[2],y[2]);
EGB_displayStart(ework,0,x[0],y[0]);
EGB_displayStart(ework,1,x[1],y[1]);
EGB_displayStart(ework,3,x[3],y[3]);
EGB_writePage(ework,1); /* 画面1設定 */
EGB_displayPage(ework,1,3);
return 0 ;
}
<<V02ファイルのメモリ再生>>
V02再生の基本も,
1.初期化を実行し
2.再生ルーチンを呼び出す
という操作になります。例えばメモリ上にV02ファイルのデータを取り込んで再生
する場合は,
int V02_memory_play_init( name, check, frame, xd, yd, wsize ) ;
char *name ; /* ファイル名 */
int (*check)() ; /* フレーム毎のチェック関数 */
int *frame ; /* 総フレーム数をバック */
int *xd ; /* 横幅のドット数をバック */
int *yd ; /* 縦幅のドット数をバック */
int *wsize ; /* ワークエリアのサイズをバック */
を呼び出したのち,次に再生ルーチンの
int V02_memory_play_repeat( work, name, vramPage, wait, repeat );
char *work ; /* wsizeバイトのワークエリア */
char *name ; /* ファイル名 */
int vramPage ; /* 0:VRAM PAGE0, 1:VRAM PAGE1 */
int wait ; /* 加算ウエイト(通常は0を入れておく) */
int repeat ; /* リピートの回数(ただし-1を入れると無限回リピートとなる) */
を呼び出すことにより,V02の再生が実行できます(これらの関数の頭の文字は大
文字になっているので注意してください)。それでは,MOVPLAY.EXPから
抜粋(一部修正あり)した実例を掲げておきましょう。
/* on memory type */
int memory_play_v02( name, wait, rep, page )
char *name ; /* file name */
int wait ; /* ウエイト */
int rep ; /* リピート回数 */
int page ; /* VRAM PAGE */
{
extern int v02_play_check() ;
int xd, yd, size, frame, error;
char *buffer;
error = V02_memory_play_init( name, v02_play_check, &frame, &xd, &yd,
&size ) ;
if( error )
goto vd10 ;
/* ワークエリアの確保 */
if( (buffer = (char *)malloc( size )) == NULL )
{
error = 7 ;
goto vd10 ; /* out of memory */
}
/* mute */
SND_elevol_mute( 0x01 ) ;
error = V02_memory_play_repeat( buffer, name, page, wait, rep ) ;
free( buffer ) ;
vd10:
return error ;
}
/* check func. */
int v02_play_check()
{
int sw;
/* 注意:sw 押されているとbit off 押されてないとbit on */
SND_joy_in_1( 0x01, &sw ); /* end check */
sw = (sw ^ 0xff) & 0x30;
if( sw == 0 )return 0;
c01:
SND_joy_in_1( 0x01, &sw );
sw = (sw ^ 0xff) & 0x30;
if( sw & 0x10 )
{
while( sw == 0x30 )
{
SND_joy_in_1( 0x01, &sw );
sw = (sw ^ 0xff) & 0x30;
}
if( sw == 0x20 )goto c02;
while( sw )
{
SND_joy_in_1( 0x01, &sw );
sw = (sw ^ 0xff) & 0x30;
if( sw == 0x30 )break;
}
return 1;
}
c02:
if( sw )goto c01;
return -1;
}
なおチェック関数の注意点に関しては,先の<<MOVファイルのメモリ再生>>
をご覧ください。
<<V02ファイルのディスク再生>>
次のイニシャライズ
int V02_disk_play_init( name, check, frame, xd, yd, wsize ) ;
char *name ; /* ファイル名 */
int (*check)() ; /* フレーム毎のチェック関数 */
int *frame ; /* 総フレーム数をバック */
int *xd ; /* 横幅のドット数をバック */
int *yd ; /* 縦幅のドット数をバック */
int *wsize ; /* ワークエリアのサイズをバック */
を呼び出したのち,次に再生ルーチンの
int V02_memory_play( work, name, vramPage, wait );
char *work ; /* wsizeバイトのワークエリア */
char *name ; /* ファイル名 */
int vramPage ; /* 0:VRAM PAGE0, 1:VRAM PAGE1 */
int wait ; /* 加算ウエイト(通常は0を入れておく) */
を呼び出します。V02のディスク再生に限ってリピート機能はありません(リピー
トしたい場合は,V02_memory_playを繰り返し呼ぶことになりますが,この時イニシャ
ライズは繰り返し呼ぶ必要ありません)。次に実例を掲げておきましょう。
/* disk read type */
int disk_play_v02( name, wait, page )
char *name ; /* file name */
int wait ; /* ウエイト */
int page ; /* VRAM PAGE */
{
extern int v02_play_check() ;
int xd, yd, size, frame, error;
char *buffer;
error = V02_memory_play_init( name, v02_play_check, &frame, &xd, &yd,
&size ) ;
if( error )
goto vd10 ;
/* ワークエリアの確保 */
if( (buffer = (char *)malloc( size )) == NULL )
{
error = 7 ;
goto vd10 ; /* out of memory */
}
/* mute */
SND_elevol_mute( 0x01 ) ;
error = V02_memory_play( buffer, name, page, wait ) ;
free( buffer ) ;
vd10:
return error ;
}
/* check func. */
int v02_play_check()
{
int sw;
/* 注意:sw 押されているとbit off 押されてないとbit on */
SND_joy_in_1( 0x01, &sw ); /* end check */
sw = (sw ^ 0xff) & 0x30;
if( sw == 0 )return 0;
c01:
SND_joy_in_1( 0x01, &sw );
sw = (sw ^ 0xff) & 0x30;
if( sw & 0x10 )
{
while( sw == 0x30 )
{
SND_joy_in_1( 0x01, &sw );
sw = (sw ^ 0xff) & 0x30;
}
if( sw == 0x20 )goto c02;
while( sw )
{
SND_joy_in_1( 0x01, &sw );
sw = (sw ^ 0xff) & 0x30;
if( sw == 0x30 )break;
}
return 1;
}
c02:
if( sw )goto c01;
return -1;
}
<<V02再生における画面設定>>
次に,V02再生における画面設定の例をMOVPLAY.EXPから抜粋して掲
げておきます。このルーチンでは
倍率 zoom(1~4倍)
横のドット数 xd(関数 V02_disk_play_init 等によって得られる情報)
縦のドット数 yd(関数 V02_disk_play_init 等によって得られる情報)
を元に,VRAMページ0の画面を最適な状態に設定します。
/* 倍率にあわせて画面設定 */
/*
注意 : GUIライブラリの都合でpage0の画面を設定し,
最後にpage1に切り換えてる
*/
int v02_graph_init( zoom, xd, yd )
int zoom, xd,yd;
{
int x0, y0;
x0 = 320/zoom - xd/2;
if( x0 < 0 )
x0 = 0;
y0 = 240/zoom - yd/2;
if( y0 < 0 )
y0 = 0;
EGB_displayPage(ework,1,2);
EGB_writePage(ework,0); /* 画面0設定 */
/* このようにすると,どの様な状態にでも確実に切り換えられる */
EGB_displayStart(ework,3,0,0);
EGB_displayStart(ework,2,1,1);
EGB_displayStart(ework,2,zoom,zoom);
EGB_displayStart(ework,0,x0,y0);
EGB_displayStart(ework,1,0,0);
EGB_displayStart(ework,3,xd,yd);
EGB_writePage(ework,1); /* 画面1設定 */
EGB_displayPage(ework,1,3);
return 0;
}
以上でライブラリの使い方の説明を終わりますが,このほかにも,最初の1フレー
ムだけを表示する等の関数も用意されています。詳しくはヘッダのUGOKU.Hを
ご覧ください。ただし,このへっダに記載された「マルチタスクを実現するための関
数」と「その他の関数」は,動くざんす再生には直接関係ない部分ですので無視して
ください。
またリンク方法に関しては,付属のリンク用応答ファイル(MOVPLYAX.L
NK等)を参考にしてください。リンクに特別にかわった約束ごとはありませんが,
hce.lib
snd.lib
tbios.lib
と一緒にリンクする必要があります。またスタックに関しては,MOV関係のサウン
ドイニシャライズで60~70Kバイト程度スタックを使用する関数が含まれていま
すので,この程度の余裕はみておいてください。といっても100Kバイト以上の余
裕があれば,まずだいじょうぶでしょう。
それでは,最後に実際にコンパイルとリンク可能なサンプルを掲げておきましょう。
次の部分を切り取って実際にコンパイルすることが可能です。またリンク情報の書か
れたSAMPLE.LNKも一緒に載せておきますので,参考にしてください。
なお,実際にサンプルを動かしてみたいときには,ファイル名を指定しているとこ
ろ( "i:\\mu\\mu.mov", "i:\\vd_org\\den.v02" )を,実際に存在するファイル名
に書き換えてください。
以下"SAMPLE.C"のリスト
#include <stdio.h>
#include <stdlib.h>
#include <egb.h>
#include <mos.h>
#include <snd.h>
#include "ugoku.h"
char swork[16384]; /* SND work */
char ework[1536]; /* EGB work */
char mwork[4096]; /* MOUSE work */
void main()
{
init() ;
/* MOVファイルの再生 */
EGB_resolution(ework,0,10) ;
memory_play_mov( "i:\\mu\\mu.mov", 0, 1, 0 ) ;
disk_play_mov( "i:\\mu\\mu.mov", 0, 1, 0 ) ;
/* V02ファイルの再生 */
EGB_resolution(ework,0,5) ;
memory_play_v02( "i:\\vd_org\\den.v02", 0, 1, 0 ) ;
disk_play_v02( "i:\\vd_org\\den.v02", 0, 0 ) ;
end() ;
return ;
}
int init()
{
SND_init(swork); /* sound init. */
SND_elevol_init();
SND_elevol_mute(0x03);
EGB_init(ework,1536); /* graph init. */
MOS_start(mwork,4096); /* mouse init. */
MOS_resolution(0,10);
MOS_resolution(1,3);
MOS_writePage(1);
MOS_horizon(0,639);
MOS_vertical(0,479);
MOS_disp(0);
MOS_setpos( 320, 240 );
return 0 ;
}
int end()
{
MOS_end();
SND_end();
return 0 ;
}
/* on memory type */
int memory_play_mov( name, wait, rep, page )
char *name ; /* file name */
int wait ; /* ウエイト */
int rep ; /* repeat */
int page ; /* vram page */
{
extern int check() ;
char *work ;
int frame, x0, y0, x1, y1, wsize ;
int error ;
/* イニシャライズ */
error
= mov_memory_play_init( name, check, &frame,&x0,&y0,&x1,&y1, &wsize ) ;
if( error )goto vd10 ;
/* bufferとworkはまとめて確保する */
if( (work = (char *)malloc( wsize+153600 )) == NULL ){
error = 7 ;
goto vd10 ; /* out of memory */
}
/* グラフィックの設定 */
mov_graph_init( 2, x0,y0,x1,y1 ) ;
/* mute set */
SND_elevol_mute( 0x03 ) ;
error = mov_memory_play_repeat(work, work+153600, name, page, wait, rep);
free( work ) ;
vd10:
return error ;
}
/* disk read type */
int disk_play_mov( name, wait, rep, page )
char *name ; /* mov file name */
int wait ; /* ウエイト */
int rep ; /* repeat */
int page ; /* vram page */
{
extern int check() ;
char *work ;
int frame, x0, y0, x1, y1, wsize ;
int error ;
/* イニシャライズ */
error
= mov_disk_play_init( name, check, &frame,&x0,&y0,&x1,&y1, &wsize ) ;
if( error )goto vd10 ;
/* bufferとworkはまとめて確保する */
if( (work = (char *)malloc( wsize+153600 )) == NULL ){
error = 7 ;
goto vd10 ; /* out of memory */
}
/* グラフィックの設定 */
mov_graph_init( 2, x0,y0,x1,y1 ) ;
/* mute set */
SND_elevol_mute( 0x03 ) ;
error = mov_disk_play_repeat(work, work+153600, name, page, wait, rep);
free( work ) ;
vd10:
return error ;
}
/* 倍率にあわせて画面設定 */
int mov_graph_init( zoom, x0,y0,x1,y1 )
int zoom, x0,y0,x1,y1 ;
{
int xd, yd ;
int x[4], y[4] ;
xd = x1-x0+1 ;
yd = y1-y0+1 ;
if( 640/zoom >= xd )
{
x[0] = ( 640/zoom - xd )/2 ;
x[1] = x0 ;
x[2] = zoom ;
x[3] = xd ;
}
else
{
x[0] = 0 ;
x[1] = x0 - ( 640/zoom - xd )/2 ;
x[2] = zoom ;
x[3] = 640/zoom ;
}
if( 480/zoom >= yd )
{
y[0] = ( 480/zoom - yd )/2 ;
y[1] = y0 ;
y[2] = zoom ;
y[3] = yd ;
}
else
{
y[0] = 0 ;
y[1] = y0 - ( 480/zoom - yd )/2 ;
y[2] = zoom ;
y[3] = 480/zoom ;
}
EGB_displayPage(ework,0,0);
EGB_writePage(ework,0); /* 画面0設定 */
/* このようにすると,どの様な状態にでも確実に切り換えられる */
EGB_displayStart(ework,3,0,0);
EGB_displayStart(ework,2,1,1);
EGB_displayStart(ework,2,x[2],y[2]);
EGB_displayStart(ework,0,x[0],y[0]);
EGB_displayStart(ework,1,x[1],y[1]);
EGB_displayStart(ework,3,x[3],y[3]);
EGB_displayPage(ework,1,1);
return 0 ;
}
/* on memory type */
int memory_play_v02( name, wait, rep, page )
char *name ; /* file name */
int wait ; /* ウエイト */
int rep ; /* リピート回数 */
int page ; /* VRAM PAGE */
{
extern int check() ;
int xd, yd, size, frame, error;
char *buffer;
error = V02_memory_play_init( name, check, &frame, &xd, &yd, &size ) ;
if( error )
goto vd10 ;
/* ワークエリアの確保 */
if( (buffer = (char *)malloc( size )) == NULL )
{
error = 7 ;
goto vd10 ; /* out of memory */
}
/* グラフィックの設定 */
v02_graph_init( 2, xd, yd ) ;
/* mute */
SND_elevol_mute( 0x01 ) ;
error = V02_memory_play_repeat( buffer, name, page, wait, rep ) ;
free( buffer ) ;
vd10:
return error ;
}
/* disk read type */
int disk_play_v02( name, wait, page )
char *name ; /* file name */
int wait ; /* ウエイト */
int page ; /* VRAM PAGE */
{
extern int check() ;
int xd, yd, size, frame, error;
char *buffer;
error = V02_memory_play_init( name, check, &frame, &xd, &yd, &size ) ;
if( error )
goto vd10 ;
/* ワークエリアの確保 */
if( (buffer = (char *)malloc( size )) == NULL )
{
error = 7 ;
goto vd10 ; /* out of memory */
}
/* グラフィックの設定 */
v02_graph_init( 2, xd, yd ) ;
/* mute */
SND_elevol_mute( 0x01 ) ;
error = V02_memory_play( buffer, name, page, wait ) ;
free( buffer ) ;
vd10:
return error ;
}
/* 倍率にあわせて画面設定 */
int v02_graph_init( zoom, xd, yd )
int zoom, xd,yd;
{
int x0, y0;
x0 = 320/zoom - xd/2;
if( x0 < 0 )
x0 = 0;
y0 = 240/zoom - yd/2;
if( y0 < 0 )
y0 = 0;
EGB_displayPage(ework,0,0);
EGB_writePage(ework,0); /* 画面0設定 */
/* このようにすると,どの様な状態にでも確実に切り換えられる */
EGB_displayStart(ework,3,0,0);
EGB_displayStart(ework,2,1,1);
EGB_displayStart(ework,2,zoom,zoom);
EGB_displayStart(ework,0,x0,y0);
EGB_displayStart(ework,1,0,0);
EGB_displayStart(ework,3,xd,yd);
EGB_displayPage(ework,1,1);
return 0;
}
/* check func. */
int check()
{
int sw;
/* 注意:sw 押されているとbit off 押されてないとbit on */
SND_joy_in_1( 0x01, &sw ); /* end check */
sw = (sw ^ 0xff) & 0x30;
if( sw == 0 )return 0;
c01:
SND_joy_in_1( 0x01, &sw );
sw = (sw ^ 0xff) & 0x30;
if( sw & 0x10 )
{
while( sw == 0x30 )
{
SND_joy_in_1( 0x01, &sw );
sw = (sw ^ 0xff) & 0x30;
}
if( sw == 0x20 )goto c02;
while( sw )
{
SND_joy_in_1( 0x01, &sw );
sw = (sw ^ 0xff) & 0x30;
if( sw == 0x30 )break;
}
return 1;
}
c02:
if( sw )goto c01;
return -1;
}
以上のソースをコンパイルしたのちに,次のようなリンク用応答ファイルを用意し,
run386 tlinkp @sample.lnk などとしてリンクすると,SAMPLE.EXPが作成
されます(ただし,ライブラリの存在するディレクトリは各自で書き換えてください)
。
以下"SAMPLE.LNK"のリスト
sample.obj
-lib \hc386\lib\hce
-lib \hc386\lib\snd
-lib \hc386\lib\tbios
-lib ugoku
-tc
-pack
-stack 160000
-exe sample.exp
7.データのフォーマット
***** MOVデータのフォーマット *****
<<MOVファイルの全体の構成>>
MOVファイル全体は次のような構成になっています(カッコの中はバイト数)。
メインヘッダ(256) + フレームヘッダ(32) + フレームデータ(不定)
+ フレームヘッダ(32) + フレームデータ(不定) …
<<メインヘッダ>>
Byte Size 内容
+0 4 "MOV2"
+4 4 bit/pixel ここでは16が入る
+8 4 total data size (本ヘッダは含まない)
+12 4 total frame
+16 4 画面 横の長さ(320ドッド)
+20 4 画面 縦の長さ(240ドット)
+24 4 laster 640が入る
+28 4 メインウエイト
+32 2 表示領域 x0
+34 2 表示領域 y0
+36 2 表示領域 x1
+38 2 表示領域 y1
+40 8 FMBファイルネーム
+48 8 FMB ch割り当て(0~5ch) + 2Byteの空き
+56 8 PMB ファイルネーム
+64 8 PMB ch割り当て(64~71ch)
+72 8 SND ch0 ファイルネーム
+80 8 SND ch1 ファイルネーム
+88 8 SND ch2 ファイルネーム
+96 8 SND ch3 ファイルネーム
+104 8 SND ch4 ファイルネーム
+112 8 SND ch5 ファイルネーム
+120 8 SND ch6 ファイルネーム
+128 8 SND ch7 ファイルネーム
+136 14 ch0~5 および ch64~71のパンポット(1Byte/ch)
( -64:左 ~ 00:中央 ~ 63:右 )
+150 1 タイミングモード ( ビット0がモード識別になっ
ており 0:ウエイトして表示 1:表示してウエイト)
+151~255 空き
計256バイト
***** 注意 *****
.SND ファイルネームが存在した場合,再生側でそのバッファを確保する。ただし
ファイルネームの最初の文字が NULL の場合,後半4バイトが確保すべきバッファ容
量を示す。たとえば .SND ファイルネームが
ファイルネーム(+96~+103) = 00 00 00 00 28 3A 00 00
とある場合,ch3として0x3A28バイト確保。もちろんファイルネームが全部 0の場合,
何もしない。
<<フレームヘッダ>>
Byte Size 内容
+0 4 ページ
+4 4 frame data size (本ヘッダは含まない)
+8 4 リザーブ
+12 2 wait
+14 2 loop 情報 0:none 1~:start&回数 0xffff:end
+16 4 FMB & PMB データ0
+20 4 FMB & PMB データ1
+24 4 FMB & PMB データ2
+28 4 FMB & PMB データ3 もしくは SNDデータ
計32バイト
***** 注意 *****
FMB & PMB データは次のように定義する
unsigned char key, ch, note, velo;
なおkeyが0のときは,何もしない。1のときは,
そのチャンネルをkey_offのリセット後に
veloが0でないならkey_onする。
SNDデータもこれに準じる。
***** V02データのフォーマット *****
<<V02ファイルの全体の構成>>
V02ファイル全体は次のような構成になっています(カッコの中はバイト数)。
メインヘッダ(256)
+ YCtoBRGテーブル(32768) + Y記号toTwoYテーブル(512)
+バインダヘッダ(32) + 音声データ(一定値) + 動画データ(不定)
+バインダヘッダ(32) + 音声データ(一定値) + 動画データ(不定) …
ただし
動画データ = 1フレーム分のデータ(不定) × バインダー内frame数(一定値)
1フレーム分のデータ = ブロック数(2) + ブロック(不定) × ブロック数
ただし(一定値)とは,メインヘッダに書かれた定まった値である。
<<メインヘッダ>>
Byte Size 内容
+0 4 "VD02"
+4 4 total data size (本ヘッダは含まない)
+8 4 total frame
+12 4 データ形式番号(6 or 7が入る)
+16 4 画面 横の長さ
+20 4 画面 縦の長さ
+24 4 ウエイト(4~8)
+28 4 バインダー内frame数
+32 4 サウンドサンプリング周波数(6000~19200)
+36 4 バインダー内サウンドデータバイト数
+40~255 空き
計256バイト
<<バインダヘッダ>>
Byte Size 内容
+0 4 バインダ番号
+4 4 バインダ data size (本ヘッダは含まない)
+8~31 空き
計32バイト
バインダとは,バインダヘッダと,一定のサウンドデータ,動画データが合わさっ
たデータ,つまり
バインダヘッダ(32) + 音声データ(一定値) + 動画データ(不定)
で構成されている。また,動画データは次のように分解できる。
動画データ = 1フレーム分のデータ(不定) × バインダー内frame数(一定値)
<<1フレーム分のデータ>>
1フレーム分のデータは次のようになっている。
1フレーム分のデータ = ブロック数(2) + ブロック(不定) × ブロック数
また,それぞれの部分は次のような構成になっている。
Byte Size 内容
+0 2 ブロック数
+2~ 不定 複数のブロック
<<1ブロック内の構成>>
Byte Size 内容
+0 2 ブロックの種類を判別するための記号
+2 4 サイズ
+6~ サイズ データ
***** V00データのフォーマット *****
<<V00ファイルの全体の構成>>
V00ファイル全体は次のような構成になっています。
メインヘッダ(256) + 32768色モードのベタデータ × total frame
<<メインヘッダ>>
Byte Size 内容
+0 4 "VD00"
+4 4 total data size (本ヘッダは含まない)
+8 4 total frame
+12 4 データ形式番号(0x80008000が入る)
+16 4 画面 横の長さ
+20 4 画面 縦の長さ
+24 4 ウエイト(4~8)
+28~255 空き
計256バイト
なお,各フレーム毎のベタデータの大きさは画面の横の長さ,縦の長さから,単純
に計算できます。例えば 160×120ドットの大きさのものであれば1フレーム
分のバイト数は
160×120×2 = 38400(バイト)
と計算できます。
***** VDSYS.TABのフォーマット *****
<<VDSYS.TAB全体の構成>>
VDSYS.TABとは,VDSYS.EXPがなすべき各種の計算処理を高速に
行うために,VDSYS.EXP自身が作り出すテーブルのことで,次のような構成
になっています。
メインヘッダ(256) + YCtoBRG(32768) + Y記号toTwoY(512)
+ BRGtoYC(65536) + TwoYtoY記号(4096)
ただし,…to…とあるのは,各種の変換テーブルであり,次のようになっている。
*YCtoBRG(32768バイト):
YCデータ(14ビット)→BRG(16ビット)変換テーブル
*Y記号toTwoY(512バイト):
Y記号(8ビット)
→2ビットの空白+Y(6ビット)+2ビットの空白+Y(6ビット)
変換テーブル
*BRGtoYC(65536バイト):
BRG(16ビット)
→2ビットの空白+YCデータ(14ビット)変換テーブル
*TwoYtoY記号(4096バイト):
Y(6ビット)+Y(6ビット)→Y記号(8ビット)変換テーブル
ただし
Y:輝度データの略,C:色相データの略,BRG:3原色(32768色)のデータ
Y記号:2つの輝度データを表す記号,TwoY:輝度データが2つ集まったもの
注意:これらのデータは非線型空間に定義されており,世間一般で扱われてる輝度,
色相データとは,かなり違うものなので注意してください。
<<メインヘッダ>>
Byte Size 内容
+0 4 "VDTB"
+4 4 色の濃さ等を示す形番号(0~12)
+8~255 空き
計256バイト
8.使用上の注意
使用に当たって次のことにご注意ください。
1.本プログラムと,この解説書の著作権は私,戸田 浩にあります。
2.本プログラムは自由に第三者に配布してくださってかまいません。ただしその場
合,本解説書を必ず付属して配布することが必要です。
3.上記の項目にもかかわらず,本プログラムの改変,引用,商利用には,必ず私の
許可を必要とします(ライブラリの使用等は改変にはあたりませんので,商利用以外
の目的でしたら,ライブラリ等の使用に特に許可はいりません)。
4.本プログラム使用に当たっての,いかなる損害にも私は責任を負いません。